3.5 缺失值处理

本文源码请见我的GitHub

3.5.1 选择处理方法|

一般有两种方法:一种方法是通过覆盖全局的掩码表示缺失值,另一种方法是标签值表示缺失值

掩码:可能是一个与原装数组维度相同的完整布尔类型数组,也可能是一个用比特表示有缺陷的局部状态。

标签 可能是一个具体的数字,也可能是一些极少出现的形式,也有可能是全局的值。

3.5.2 Pandas 的缺失+值

1.None:Python对象类型的缺失值 object 类型

2.NaN: 数值类型的缺失值 : 不是一个数字

3.区别: 可以等价|

3.5.3 处理缺失值 import!!

1. 发现缺失值 isnull() notnull()

1
2
import pandas as pd 
import numpy as np
1
2
data = pd.Series([1,np.nan, 'eh', None])
data.isnull()
0    False
1     True
2    False
3     True
dtype: bool
1
2
#布尔类型的掩码数组可以直接作为Series或DataFrame的索引使用
data[data.notnull()]
0     1
2    eh
dtype: object

2.剔除缺失值

1
data.dropna()
0     1
2    eh
dtype: object
1
data
0       1
1     NaN
2      eh
3    None
dtype: object
1
2
3
4
5
#dataframe上要进行一些设置才可以使用
df = pd.DataFrame([ [1, np.nan, 2],
[2, 3, 5],
[np.nan, 4, 6]])
df
0 1 2
0 1.0 NaN 2
1 2.0 3.0 5
2 NaN 4.0 6

不能从dataFrame中单独剔除一个值,要么去掉一个整行或者一个整列。 dropna()默认是去掉一整行

1
df.dropna()
0 1 2
1 2.0 3.0 5
1
df.dropna(axis=1) #去掉列
2
0 2
1 5
2 6
1
df.dropna(axis=0)
0 1 2
1 2.0 3.0 5
1
2
#行列全部去掉
df.dropna(how='all')
0 1 2
0 1.0 NaN 2
1 2.0 3.0 5
2 NaN 4.0 6

3. 填充默认值

1
2
data = pd.Series([1, np.nan, 2, None,  3], index = list('abces'))
data
a    1.0
b    NaN
c    2.0
e    NaN
s    3.0
dtype: float64
1
data.fillna(99)# use99 to fill nan
a     1.0
b    99.0
c     2.0
e    99.0
s     3.0
dtype: float64
1
2
#也可以用缺失值前面的有效值进行从前往后的填充 forward-fill
data.fillna(method='ffill')
a    1.0
b    1.0
c    2.0
e    2.0
s    3.0
dtype: float64
1
2
#从后往前填充 back-fill
data.fillna(method='bfill')
a    1.0
b    2.0
c    2.0
e    3.0
s    3.0
dtype: float64
1
df.fillna(method='ffill')
0 1 2
0 1.0 NaN 2
1 2.0 3.0 5
2 2.0 4.0 6
1
df.fillna(method='ffill', axis= 1)
0 1 2
0 1.0 1.0 2.0
1 2.0 3.0 5.0
2 NaN 4.0 6.0